package alo.p3.work;

import alo.p3.ListNode;

//以K为块，逆置链表（123456  K=2）-->214365
public class ReverseListK {


    //设置头结点
    ListNode GetKPlusOneThNode(int K, ListNode head){
        ListNode Kth;
        int i;
        if (head==null)
            return head;
        for (i=0,Kth=head;Kth!=null&&i<K;i++,Kth=Kth.getNext());
        if (i==K&&Kth!=null)
            return Kth;
        return head;
    }



    //判断是否还有K个结点
    boolean HasNodes(int K, ListNode head){
        int i;
        for (i=0;head!=null&&i<K;i++,head=head.getNext());
        if (i==K)
            return true;
        return false;

    }

    ListNode ReverseListK(ListNode head, int K){
        if (K==1||K==0)
            return head;

        ListNode newHead,cur=head,temp,next;
        if (HasNodes(K-1,cur))
            newHead=GetKPlusOneThNode(K-1,cur);
        else return head;
        while (cur!=null&&HasNodes(K,cur)){
            //temp为下一个块的头结点
            temp=GetKPlusOneThNode(K,cur);
            //逆置前面的K个结点，并当前位置移动到K+1
            int i=0;
            while (i<K){
                next=cur.getNext();
                cur.setNext(temp);
                temp=cur;
                cur=next;
                i++;
            }
        }
        return newHead;
    }

}
